import axios from 'axios'

// 创建axios实例
const service = axios.create({
  // 根据环境判断是否使用绝对URL
  baseURL: import.meta.env.DEV ? '' : 'http://localhost:8080',
  timeout: 10000
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 在开发环境下，如果是通过浏览器发起请求，我们使用相对路径让Vite代理处理
    // 在生产环境或客户端环境下，我们直接请求后端服务器
    if (!window.pywebview && import.meta.env.DEV) {
      // 开发环境中使用相对路径，将通过Vite代理转发
      config.url = config.url; // 保持原样，通过Vite代理
    } else {
      // 生产环境或客户端环境，直接访问后端
      // 确保我们有完整的URL，如果已经是绝对URL则不变，否则添加前缀
      if (!config.url.startsWith('http')) {
        config.baseURL = 'http://localhost:8080';
      }
    }

    // 从localStorage获取token
    const token = localStorage.getItem('token')
    if (token) {
      // 将token添加到请求头
      config.headers['Authorization'] = `Bearer ${token}`
    }

    console.log('发送请求到:', config.baseURL + config.url);
    return config
  },
  error => {
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    return response
  },
  error => {
    console.error('响应错误:', error)
    if (error.response && error.response.status === 401) {
      // 清除token并重定向到登录页
      localStorage.removeItem('token')
      localStorage.removeItem('userInfo')
      
      if (window.location.pathname !== '/login') {
        window.location.href = '/login'
      }
    }
    return Promise.reject(error)
  }
)

/**
 * 请求方法
 * @param {Object} options - 请求选项
 * @returns {Promise} 请求的Promise
 */
export const request = (options) => {
  // 如果有pywebview环境（客户端应用）
  // if (window.pywebview !== undefined) {
  //   // 提取方法名，调用对应的pywebview API
  //   const methodName = options.url.split('/').pop()
  //   return window.pywebview.api[methodName](options.data)
  // }
  
  // 网页环境，使用axios发送HTTP请求
  return service(options)
}
